/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.talentos.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.talentos.vo.StatusAgendaVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Leonardo Angelos da Costa
 */
public class StatusAgendaDAO extends BaseDAO<StatusAgendaVO>{

    @Override
    public void inserir(StatusAgendaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TB_STATUSAGENDA(DS_STATUSAGENDA, ST_STATUS)");
        query.append("VALUES (?, ?)");

        List<?> parametros = criarParametros(entidade.getDsStatusAgenda(),entidade.getStStatus());

        Integer idGerado = ((Long) executarInsercao(query.toString(), parametros)).intValue();

        entidade.setIdStatusAgenda(idGerado);
    }

    @Override
    public void alterar(StatusAgendaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TB_STATUSAGENDA SET DS_STATUSAGENDA = ?, ST_STATUS = ?");
        query.append("WHERE ID_STATUSAGENDA = ?");

        List<?> parametros = criarParametros(entidade.getDsStatusAgenda(), entidade.getStStatus(), entidade.getIdStatusAgenda());

        executarAlteracao(query.toString(), parametros);
    }

    @Override
    public void excluir(StatusAgendaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TB_STATUSAGENDA");
        query.append("WHERE ID_STATUSAGENDA = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getIdStatusAgenda()));
    }

    @Override
    public StatusAgendaVO consultarPorId(Serializable id) {

        StatusAgendaVO statusAgenda = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_STATUSAGENDA T WHERE T.ID_STATUSAGENDA = ?");

        statusAgenda = consultarUm(query.toString(), criarParametros(id));

        return statusAgenda;
    }

    @Override
    public List<StatusAgendaVO> consultarPorExemplo(StatusAgendaVO exemplo) {

        List<StatusAgendaVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_STATUSAGENDA T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    
    public List<StatusAgendaVO> consultarPorExemploAlterar(StatusAgendaVO exemplo) {

        List<StatusAgendaVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_STATUSAGENDA T WHERE 1=1");

        mapearQueryParaExemploAlterar(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected StatusAgendaVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        StatusAgendaVO statusAgenda = new StatusAgendaVO();

        statusAgenda.setIdStatusAgenda(rs.getInt("ID_STATUSAGENDA"));
        statusAgenda.setDsStatusAgenda(rs.getString("DS_STATUSAGENDA"));
        statusAgenda.setStStatus(rs.getBoolean("ST_STATUS"));

        return statusAgenda;
    }

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, StatusAgendaVO exemplo) {

        if (exemplo.getDsStatusAgenda() != null && !exemplo.getDsStatusAgenda().isEmpty()) {
            query.append("AND T.DS_STATUSAGENDA LIKE ?");
            adicionarParametro("%" + exemplo.getDsStatusAgenda() + "%");
        }
        if (exemplo.getStStatus() != null /*&& !exemplo.getStStatus().isEmpty()*/) {
            query.append("AND T.ST_STATUS LIKE ?");
            adicionarParametro("%" + exemplo.getStStatus() + "%");
        }
    }


    protected void mapearQueryParaExemploAlterar(ConstrutorSQL query, StatusAgendaVO exemplo) {

        if (exemplo.getDsStatusAgenda() != null && !exemplo.getDsStatusAgenda().isEmpty()) {
            query.append("AND T.DS_STATUSAGENDA LIKE ?");
            adicionarParametro(exemplo.getDsStatusAgenda());
        }
    }

}
